package com.shihan.rabbitmq.demo.config;

import com.shihan.rabbitmq.demo.constant.RabbitMQInfo;
import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Description RabbitMQ 的配置类：
 *              只需要声明 Queue、Exchange、Binding 即可，
 *              starter 包自动帮我们创建了 ConnectionFactory、RabbitTemplate、RabbitAdmin
 *              也自动帮我们实现了 RabbitListenerContainerFactory 对象的创建
 * @Author shihan
 * @Date 2020/12/26 22:11
 * @Version 1.0
 */
@Configuration
public class RabbitMQConfig {

    public static final String BINDING_KEY_1 = "rabbit.hello";

    @Bean
    public Queue queue(){
        return new Queue(RabbitMQInfo.QUEUE_BOOT_Q1,false,false,false,null);
    }

    @Bean
    public Exchange exchange(){
        return new DirectExchange(RabbitMQInfo.EXCHANGE_BOOT_DIRECT_E1,false,false,null);
    }

    /**
     * TODO 疑问：
     *      1、如果我想创建多个 Queue、Exchange，只使用 @Bean 行吗，需要做其他修改吗？
     *      2、如果我想要创建多个 Binding，只使用 @Bean 行吗，需要做其他修改吗？
     *      3、如果我想给一个 Exchange 绑定多个 Queue，要怎么处理？
     *        （虽然说是拿 Queue、Exchange 的名称就可以绑定，但是究竟如何通过 Binding 对象进行绑定？）
     *      4、如果我想给多个 Exchange 绑定多个不同的 Queue，要怎么处理？
     * @return
     */
    @Bean
    public Binding binding(){
        return new Binding(RabbitMQInfo.QUEUE_BOOT_Q1, Binding.DestinationType.QUEUE,RabbitMQInfo.EXCHANGE_BOOT_DIRECT_E1,BINDING_KEY_1,null);
    }


}
